/**
 * 寄生式继承
 * 
 * 是对原型继承的第二次封装，并在第二次封装过程中对继承的对象进行拓展，这样不仅有父类的属性和方法还能添加新的属性和方法
 * 
 */
function inheritObject(o) {
    // 声明一个过渡函数代码
    function F() {}
    // 过渡对象的原型继承父对象
    F.prototype = o;
    // 返回过渡对象的一个实例，该实例的原型继承了父对象
    return new F();
}
// 寄生式继承
// 声明基对象
var book = {
    name: 'js book',
    alikeBook: ['css book', 'html book']
};

function createBook(obj) {
    // 通过原型继承方式创建新对象
    var o = new inheritObject(obj);
    // 拓展新对象
    o.getName = function() {
        console.log(this.name);
    }
    // 返回拓展后的新对象
    return o;
}

var instance1 = createBook(book);
var instance2 = createBook(book);

instance1.name = 'xml book';
instance2.name = 'flash book';
instance1.alikeBook.push('xml book');
instance2.alikeBook.push('flash book');
console.log(instance1.getName(), instance2.getName());
console.log(book.alikeBook);
